<?php

/**
 * Description of RepoUsuario
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class RepoUsuario extends Repositorio
{

  function __construct()
  {
    $this->tabla = "usuario";
    $this->id = "idUsuario";
  }

  function buscar($id)
  {
    $link = $this->OpenDB();
    $query = parent::buscar($id);
    $usuario = new Usuario();
    $usuario->setId($id);
    $usuario->setApellido($query[0]->apellido);
    $usuario->setVersion($query[0]->version);
    $usuario->setDeshabilitado($query[0]->deshabilitado);
    $usuario->setNombre($query[0]->nombre);
    $usuario->setNombreUsuario($query[0]->nombreUsuario);
    $usuario->setClave($query[0]->clave);
    $repoGrupo = new RepoGrupo();
    $grupos = $repoGrupo->buscarPorUsuario($id);
    $usuario->setGrupos($grupos);
    $this->CloseDB($link);
    return $usuario;
  }

  function agregar(Usuario $usuario)
  {
    try
    {
      $clave = $usuario->getClave() != "" && $usuario->getClave() != null ? md5($usuario->getClave()) : "";
      $link = $this->OpenDB();
      $this->beginTransaction();
      $query = "INSERT INTO " . $this->tabla . "(nombre, nombreUsuario, clave, apellido, deshabilitado) values (";
      $query .= "'" . $usuario->getNombre() . "', ";
      $query .= "'" . $usuario->getNombreUsuario() . "', ";
      $query .= "'" . $clave . "', ";
      $query .= "'" . $usuario->getApellido() . "', ";
      $query .= $usuario->getDeshabilitado() . ")";
      $result = $this->PostSQL($query);
      $id = $this->GetInsertedId();
      if (is_array($usuario->getGrupos()))
      {
        /* @var $grupo GrupoDTO */
        foreach ($usuario->getGrupos() as $grupo)
        {
          if ($result)
          {
            $query = "INSERT INTO usuario_grupo (usuario, grupo) values (";
            $query .= $id . ", " . $grupo->getId() . ")";
            $result = $this->PostSQL($query);
          }
        }
      }
      $this->commitTransaction();
      $this->CloseDB($link);
      return $result;
    } catch (Exception $ex)
    {
      return $ex;
    }
  }

  function modificar(Usuario $usuario)
  {
    try
    {
      $clave = $usuario->getClave() != "" ? md5($usuario->getClave()) : "";
      $link = $this->OpenDB();
      $this->beginTransaction();
      $query = "UPDATE " . $this->tabla . " SET ";
      $query .= "nombre = '" . $usuario->getNombre() . "', ";
      $query .= "nombreUsuario = '" . $usuario->getNombreUsuario() . "', ";
      $query .= "apellido = '" . $usuario->getApellido() . "', ";
      if (!is_null($usuario->getClave()))
      {
        $query .= "clave = '" . $clave . "', ";
      }
      $query .= "deshabilitado = " . $usuario->getDeshabilitado() . " ";
      $query .= "WHERE " . $this->id . " = " . $usuario->getId();
      $result = $this->PostSQL($query);
      if ($result)
      {
        $query = "DELETE FROM usuario_grupo WHERE usuario = " . $usuario->getId();
        $this->PostSQL($query);
        if ($result && is_array($usuario->getGrupos()))
        {
          /* @var $grupo GrupoDTO */
          foreach ($usuario->getGrupos() as $grupo)
          {
            if ($result)
            {
              $query = "INSERT INTO usuario_grupo (usuario, grupo) values (";
              $query .= $usuario->getId() . ", " . $grupo->getId() . ")";
              $result = $this->PostSQL($query);
            }
          }
        }
        if ($result)
        {
          $this->commitTransaction();
        }
      }
      if (!$result)
      {

        $this->rollbackTransaction();
      }
      $this->CloseDB($link);
      return $result;
    } catch (Exception $ex)
    {
      return $ex;
    }
  }

  function modificarClave($idUsuario, $clave){
    $link = $this->OpenDB();
    $query = "UPDATE usuario set clave ='".md5($clave)."' WHERE idUsuario = ".$idUsuario;
    $result = $this->PostSQL($query);
    $this->CloseDB($link);
    return $result;
  }
  function buscarUsuarioPorNombreUsuarioYPass()
  {
    $link = $this->OpenDB();
  }

  function listar()
  {
    $link = $this->OpenDB();
    $usuariosObj = parent::listar();
    $usuarios = "";
    foreach ($usuariosObj as $usuarioObj)
    {
      $usuario = new Usuario();
      $usuario->setApellido($usuarioObj->apellido);
      $usuario->setClave($usuarioObj->clave);
      $usuario->setDeshabilitado($usuarioObj->deshabilitado);

      $usuario->setId($usuarioObj->idUsuario);
      $usuario->setNombre($usuarioObj->nombre);
      $usuario->setNombreUsuario($usuarioObj->nombreUsuario);

      $usuarios[] = $usuario;
    }
    $this->CloseDB($link);
    return $usuarios;
  }

  function eliminar($id)
  {
    $link = $this->OpenDB();
    $this->beginTransaction();
    $eliminar = "DELETE FROM usuario_grupo WHERE usuario = " . $id;
    $result = $this->PostSQL($eliminar);
    if ($result)
    {
      $result = parent::eliminar($id);
    }
    if ($result)
    {
      $this->commitTransaction();
    } else
    {
      $this->rollbackTransaction();
    }
    $this->CloseDB($link);
    return $result;
  }

}

?>
